﻿using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.IO;
using System.Linq;
using System.Text;
using System.Windows.Forms;

using Business_Entity;
using iTextSharp;
using iTextSharp.text;
using iTextSharp.text.pdf;
using System.Web;
using Business_Logic;


namespace PetSoft.GUI.Compras
{
    public partial class GUIMantenimientoDeCompras : Form
    {
    	private Boolean bd;
        private List<Business_Entity.BEOrdenCompra> lstOrdenCompra;
        private Business_Logic.BLOrdenCompra blOC;
        private Business_Logic.BLProductoProveedor bpp;
        private Business_Logic.BLProveedor bp=new Business_Logic.BLProveedor();
        private Business_Entity.BEProveedor ProveedorSeleccionado;
        public GUIMantenimientoDeCompras()
        {
        	try{
            InitializeComponent();
            EliminarBTN.Enabled=false;
            VerBTN.Enabled=false;
            NuevoBTN.Enabled=false;
            for (int i=0;i<BLInfo.usuarioActual.Rol.Privilegio.Count;i++){
            	if ((new BLPrivilegio()).existePrivilegio(2,"COMP","ORDC",BLInfo.UsuarioActual.Rol.Privilegio)){
	                    EliminarBTN.Enabled=true;
			        	VerBTN.Enabled=true;
			        	
			        	NuevoBTN.Enabled=true;
	                }
        			if ((new BLPrivilegio()).existePrivilegio(1,"COMP","ORDC",BLInfo.UsuarioActual.Rol.Privilegio)){
			        	NuevoBTN.Enabled=true;
	                }
	            }
            
            DeFechaPedidoDTP.MaxDate=DateTime.Now;
            DeFechaEntregaDTP.MaxDate=DateTime.Now;
            lstOrdenCompra=new List<BEOrdenCompra>();
            OrdenCompraTB.KeyPress+=new KeyPressEventHandler(Utils.SoloNumerosTB);
            this.WindowState=FormWindowState.Normal;
            DeFechaPedidoDTP.CustomFormat="yyyyMMdd";
            HastaFechaPedidoDTP.CustomFormat="yyyyMMdd";
            ListaOrdenCompraDGV.MultiSelect=false;
            DateTime dia=new DateTime();
            dia=DateTime.Now;
            String cad=DateTime.Now.ToString("yyyyMMdd");
            //DeFechaPedidoDTP.Value=DateTime.Now;
            //HastaFechaPedidoDTP.Value=DateTime.Now;
            //DeFechaEntregaDTP.Value=DateTime.Now;
            //HastaFechaEntregaDTP.Value=DateTime.Now;
            ProveedorTB.Enabled=false;
            ListaOrdenCompraDGV.AllowUserToAddRows=false;
            lstOrdenCompra = new List<Business_Entity.BEOrdenCompra>();
            blOC = new Business_Logic.BLOrdenCompra();
            this.MaximizeBox=false;
            this.MinimizeBox=false;
            
            List<BEProveedor> lstProveedores=new List<BEProveedor>();
            lstProveedores=bp.getListaproveedores();
            List<String> listaProveedores=new List<string>();
            DeFechaEntregaDTP.Enabled=false;
            DeFechaPedidoDTP.Enabled=false;
            HastaFechaEntregaDTP.Enabled=false;
           	HastaFechaPedidoDTP.Enabled=false;
           	GenerarBTN.Visible=false;
           	bd=false;
        	}catch(Exception ex){
        		Utils.MessageError("",ex);
        	}
        }

        public GUIMantenimientoDeCompras(int opcion){
        	try{
        	InitializeComponent();
            DeFechaPedidoDTP.MaxDate=DateTime.Now;
            DeFechaEntregaDTP.MaxDate=DateTime.Now;
            lstOrdenCompra=new List<BEOrdenCompra>();
            OrdenCompraTB.KeyPress+=new KeyPressEventHandler(Utils.SoloNumerosTB);
            this.WindowState=FormWindowState.Normal;
            DeFechaPedidoDTP.CustomFormat="yyyyMMdd";
            HastaFechaPedidoDTP.CustomFormat="yyyyMMdd";
            ListaOrdenCompraDGV.MultiSelect=false;
            DateTime dia=new DateTime();
            dia=DateTime.Now;
            String cad=DateTime.Now.ToString("yyyyMMdd");
            ProveedorTB.Enabled=false;
            ListaOrdenCompraDGV.AllowUserToAddRows=false;
            lstOrdenCompra = new List<Business_Entity.BEOrdenCompra>();
            blOC = new Business_Logic.BLOrdenCompra();
            this.MaximizeBox=false;
            this.MinimizeBox=false;
            
            List<BEProveedor> lstProveedores=new List<BEProveedor>();
            lstProveedores=bp.getListaproveedores();
            List<String> listaProveedores=new List<string>();
            DeFechaEntregaDTP.Enabled=false;
            DeFechaPedidoDTP.Enabled=false;
            HastaFechaEntregaDTP.Enabled=false;
           	HastaFechaPedidoDTP.Enabled=false;
           	NuevoBTN.Visible=false;
           	VerBTN.Visible=false;
           	EliminarBTN.Visible=false;
           	bd=true;
           	for (int i=0;i<BLInfo.usuarioActual.Rol.Privilegio.Count;i++){
	                if ((new BLPrivilegio()).existePrivilegio(3,"COMP","ORDC",BLInfo.UsuarioActual.Rol.Privilegio)){
	                    GenerarBTN.Enabled=true;
	                    BuscarBTN.Enabled=true;
	                }
        			
	            }
           	
        	}catch(Exception ex){
        		Utils.MessageError("",ex);
        	}
        }

        
        private void Modificar_Orden_Compra(int num)
        {
        	try{
        	int cont=0;
        	if (lstOrdenCompra.Count>0){
        		for (int j=0;j<ListaOrdenCompraDGV.Rows.Count;j++)
        		{
        			if ((bool)ListaOrdenCompraDGV[0,j].Value){
        				cont++;
        			}
        		}
        		if ((cont>1) || (cont==0)){
        			Utils.MessageAviso("Debe de seleccionar solo una fila");
        		}
        		else{
        			int fila=0; 
	            //int fila=ListaOrdenCompraDGV.CurrentRow.Index;
		            int valor=0; //= int.Parse(ListaOrdenCompraDGV[0, fila].Value.ToString());
		            for (int i=0;i<ListaOrdenCompraDGV.Rows.Count;i++){
		            	if (bool.Parse(ListaOrdenCompraDGV[0,i].Value.ToString())){
        					fila=i; 
        					valor = int.Parse(ListaOrdenCompraDGV[1, fila].Value.ToString());		            
        					break;
        				}
		            }
		            Compras.GUINuevaOrdenDeCompra v = new Compras.GUINuevaOrdenDeCompra(num,valor);
		            v.ShowDialog(this);
        		}
        	}
        	else{
        		Utils.MessageAviso("Debe de seleccionar al menos una fila");
        	}
        	}catch(Exception ex){
        		Utils.MessageError("",ex);
        	}
        }
        private void ModificarBTN_Click(object sender, EventArgs e)
        {
        	Modificar_Orden_Compra(2);
        }

        private void NuevoBTN_Click(object sender, EventArgs e)
        {
        	try{
	            Compras.GUINuevaOrdenDeCompra v = new Compras.GUINuevaOrdenDeCompra(1, -1);
	            v.ShowDialog(this);
        	}catch(Exception ex){
        		Utils.MessageError("",ex);
        	}
        }
        public void InsertarProveedorElegido(BEProveedor beprov)
        {
        	try{
        	ProveedorSeleccionado=new BEProveedor();
        	ProveedorSeleccionado.IdProv=beprov.IdProv;
        	ProveedorSeleccionado.RazonSocial=beprov.RazonSocial;
        	ProveedorSeleccionado.Ruc=beprov.Ruc;
        	ProveedorSeleccionado.TelefonoContacto=beprov.TelefonoContacto;
        	ProveedorSeleccionado.Contacto=beprov.Contacto;
        	ProveedorTB.Text=ProveedorSeleccionado.RazonSocial;
        	}
        	catch(Exception ex){
        		Utils.MessageError("",ex);
        	}
        }
		
        private void BuscarOrdenesCompra()
        {
        	
        	try{
        	int Codigo;
        	if (OrdenCompraTB.Text.CompareTo("")==0)
        	{Codigo=-1;}
        	else 
        	{
        		Codigo =int.Parse(OrdenCompraTB.Text);
        		
        	}
        	
        	
        	String FecIniFP = DeFechaPedidoDTP.Value.ToString("yyyyMMdd");
        	String FecFinFP = HastaFechaPedidoDTP.Value.ToString("yyyyMMdd");
        	String FecIniFE = DeFechaEntregaDTP.Value.ToString("yyyyMMdd");
        	String FecFinFE = HastaFechaEntregaDTP.Value.ToString("yyyyMMdd");
        	if (DesdeCHB.Checked==false){FecIniFP="";}
        	if (HastaCHB.Checked==false){FecFinFP="";}
        	if (DesdefeCHB.Checked==false){FecIniFE="";}
        	if (HastafeCHB.Checked==false){FecFinFE="";}
        	String Prov = ProveedorTB.Text;
        	if (Prov.CompareTo("")==0){Prov="Todos";}
            lstOrdenCompra=blOC.BuscarOrdenCompra(Codigo,FecIniFP,FecFinFP,FecIniFE,FecFinFE,Prov);
            if (bd){
            	for (int i=0;i<lstOrdenCompra.Count;i++){
            		if (lstOrdenCompra[i].EstadoOrdenCompra.CompareTo("ENTREGADO")!=0){
            			lstOrdenCompra.RemoveAt(i);
            			i--;
            		}
            	}
            }
            ListaOrdenCompraDGV.Rows.Clear();
            Business_Entity.BEOrdenCompra beOC = new Business_Entity.BEOrdenCompra();
            for (int i = 0; i < lstOrdenCompra.Count; i++)
            {
                beOC = lstOrdenCompra[i];
                String cadFormato=beOC.fechaPedido.Substring(6,2)+"-"+beOC.fechaPedido.Substring(4,2)+"-"+beOC.fechaPedido.Substring(0,4);
                String cadFormato2=beOC.fechaEntrega.Substring(6,2)+"-"+beOC.fechaEntrega.Substring(4,2)+"-"+beOC.fechaEntrega.Substring(0,4);
                ListaOrdenCompraDGV.Rows.Add(new object[] { false,beOC.Id,beOC.TotalProd,beOC.precioTotal, beOC.EstadoOrdenCompra,cadFormato,cadFormato2 });
            
            }
            CantidadFilasLBL.Text="Cantidad de Ordenes de Compra : "+lstOrdenCompra.Count;
        	}catch(Exception ex){
        		Utils.MessageError("",ex);
        	}
        }
        private void BuscarBTN_Click(object sender, EventArgs e)
        {
        	BuscarOrdenesCompra();
        }
        
        
        void ListaOrdenCompraDGVCellClick(object sender, DataGridViewCellEventArgs e)
        {
        	try{
        	int fila=e.RowIndex;
        	if (fila>0){
        		ListaOrdenCompraDGV.Rows[fila].Selected=true;
        	}
        	}catch(Exception ex){
        		Utils.MessageError("",ex);
        	}
        }
        
        void EliminarBTNClick(object sender, EventArgs e)
        {
        	bool buscar=false;
        	try{
        	if (ListaOrdenCompraDGV.Rows.Count>0)
        	{
        		
        		
		        	int fila=0;//=ListaOrdenCompraDGV.CurrentRow.Index;
		        	for (int i=0;i<ListaOrdenCompraDGV.Rows.Count;i++)
		        	{
			        	//ListaOrdenCompraDGV.Rows[fila].Selected=true;
			        	int cont=0;
			        	if ((bool)(ListaOrdenCompraDGV[0,i].Value))
			        	{
			        		buscar=true;
			        		if (cont==0) {
			        			
			        			if (Utils.MessagePregunta("¿Deseas eliminar las ordenes de compra seleccionadas?")){
			        				break;
			        			}
			        		}
				        	int cod=int.Parse(ListaOrdenCompraDGV[1,i].Value.ToString());
				        	Business_Logic.BLOrdenCompra bl=new Business_Logic.BLOrdenCompra();
				        	bl.EliminarOrdenCompra(cod);
			        	}
		        	}
		        	if (buscar){
		        		BuscarOrdenesCompra();
		        	}else{
		        		Utils.MessageAviso("No hay ninguna Orden de Compra Seleccionaa");
		        	}
        		
        	}
        	else{
        		Utils.MessageAviso("Debe de seleccionar al menos una fila para poder realizar la operación");
        	}
        	}catch(Exception ex){
        		Utils.MessageError("",ex);
        	}
        }
        
        void BuscarProveedorBTNClick(object sender, EventArgs e)
        {
        	BuscarProveedor();
        }
        private void BuscarProveedor(){
        	
        	try{
        	GUIBuscarProveedor guiP=new GUIBuscarProveedor(this);
        	guiP.ShowDialog(this);
        	}
        	catch(Exception ex){
        		Utils.MessageError("",ex);
        	}
        }
        
        void DesdeCHBCheckedChanged(object sender, EventArgs e)
        {
        	try{
        
        	if (DesdeCHB.Checked==true){
        		DeFechaPedidoDTP.Enabled=true;
        	}
        	else{
        		DeFechaPedidoDTP.Enabled=false;
        	}
        	}
        	catch(Exception ex){
        		Utils.MessageError("",ex);
        	}
        }
        
        void HastaCHBCheckedChanged(object sender, EventArgs e)
        {
        	try{
        	if (HastaCHB.Checked==true){
        		HastaFechaPedidoDTP.Enabled=true;
        	}
        	else{
        		HastaFechaPedidoDTP.Enabled=false;
        	}
        	}
        	catch(Exception ex){
        		Utils.MessageError("",ex);
        	}
        }
        
        void DesdefeCHBCheckedChanged(object sender, EventArgs e)
        {
        	
        	try{
        	if (DesdefeCHB.Checked==true){
        		DeFechaEntregaDTP.Enabled=true;
        	}
        	else{
        		DeFechaEntregaDTP.Enabled=false;
        	}
        	}catch(Exception ex){
        		Utils.MessageError("",ex);
        	}
        }
        
        
        void HastafeCHBCheckedChanged(object sender, EventArgs e)
        {
        	
        	try{
        	if (HastafeCHB.Checked==true){
        		HastaFechaEntregaDTP.Enabled=true;
        	}
        	else{
        		HastaFechaEntregaDTP.Enabled=false;
        	}
        	}
        	catch(Exception ex){
        		Utils.MessageError("",ex);
        	}
        }
        

        void LimpiarBTNClick(object sender, EventArgs e)
        {
        	try{
        
	        	OrdenCompraTB.Text="";
	        	ProveedorTB.Text="";
	        	DesdefeCHB.Checked=false;
	        	DesdeCHB.Checked=false;
	        	HastafeCHB.Checked=false;
	        	HastaCHB.Checked=false;
	        	DesdefeCHB.Enabled=true;;
	        	DesdeCHB.Enabled=true;
	        	HastafeCHB.Enabled=true;
	        	HastaCHB.Enabled=true;
	        	DeFechaEntregaDTP.Enabled=false;
	        	DeFechaPedidoDTP.Enabled=false;
	        	HastaFechaPedidoDTP.Enabled=false;
	        	HastaFechaEntregaDTP.Enabled=false;
	        	lstOrdenCompra.Clear();
	        	ListaOrdenCompraDGV.Rows.Clear();
	        	CantidadFilasLBL.Text="Cantidad de Ordenes de Compra : 0";
        	}catch(Exception ex){
        		Utils.MessageError("",ex);
        	}
        }
        
        void VerBTNClick(object sender, EventArgs e)
        {
        	Modificar_Orden_Compra(3);
        }
        
        void SeleccionarTodoCHBCheckedChanged(object sender, EventArgs e)
        {
        	try{
	        	bool cambio=false;
	        	if (SeleccionarTodoCHB.Checked){cambio=true;}
	        	for (int i=0;i<ListaOrdenCompraDGV.Rows.Count;i++){
	        		ListaOrdenCompraDGV[0,i].Value=cambio;
	        	}
        	}catch(Exception ex){
        		Utils.MessageError("",ex);
        	}
        }
        bool Verifica_CheckBox_OrdenCompra(){
        	try{
	        	bool cond=false;
	        	for (int i=0;i<ListaOrdenCompraDGV.Rows.Count;i++){
	        		if ((bool)ListaOrdenCompraDGV[0,i].Value){
	        			return true;
	        		}
	        	}
        	}catch(Exception ex){
        		Utils.MessageError("",ex);
        	}
        	return false;
        }
        void GenerarBTNClick(object sender, EventArgs e)
        {
        	try{
        	int contador=-1;
        	if (ListaOrdenCompraDGV.Rows.Count>0){
        		if (Verifica_CheckBox_OrdenCompra()){
		        	if (Utils.MessagePregunta("¿Está seguro que desea exportar este reporte?"))
					{
		        		try{
		        		List<BEOrdenCompra> lstOrdenCompra=new List<BEOrdenCompra>();
		        		for (int i=0;i<ListaOrdenCompraDGV.Rows.Count;i++){
		        			
		        			if ((bool)ListaOrdenCompraDGV[0,i].Value){
		        				contador++;
		        				int idcod=(int)ListaOrdenCompraDGV[1,i].Value;
		        				lstOrdenCompra.Add(blOC.BuscarOrdenCompra(idcod));
		        				lstOrdenCompra[contador].LineaordenCompra=new List<BELineaOrdenCompra>();
		        				lstOrdenCompra[contador].LineaordenCompra.AddRange(blOC.BuscarLineaOrdenCompra(idcod));
		        			}
		        		}
		        		
		        			
							int cont = 1;
							String path = "..\\ReporteOrdenCompra.pdf";
							while (true)
							{
								if (File.Exists(path))
								{
									path = "..\\ReporteOrdenCompra" + cont.ToString() + ".pdf";
									cont++;
								}
								else
								{
									break;
								}
							}	
							
							Document doc = new Document(PageSize.A4.Rotate());
							doc.AddCreationDate();
							PdfWriter.GetInstance(doc, new FileStream(path, FileMode.Create));
							doc.Open();
							iTextSharp.text.Font fntTit = FontFactory.GetFont(FontFactory.HELVETICA, 20, BaseColor.BLACK);
							iTextSharp.text.Font fntTab = FontFactory.GetFont(FontFactory.COURIER, 8, BaseColor.GRAY);
							iTextSharp.text.Font fntRes = FontFactory.GetFont(FontFactory.COURIER, 7);
							PdfPTable tab = new PdfPTable(7);
							tab.TotalWidth = 820f;
							float[] widths = new float[] { 40f, 90f, 90f, 90f, 40f, 40f,40f};
							tab.SetWidths(widths);
							tab.LockedWidth = true;
							PdfPCell cellHead =new PdfPCell(Utils.getEncabezadoReporte(),true);
							cellHead.Colspan=7;
							cellHead.Border=0;
							cellHead.HorizontalAlignment=0;
							tab.AddCell(cellHead);
							PdfPCell cell = new PdfPCell(new Phrase("REPORTE DE ORDEN DE COMPRA",fntTit));
							cell.Colspan = 7;
							cell.HorizontalAlignment = 1;
							tab.AddCell(cell);
							PdfPCell cell2 = new PdfPCell(new Phrase("Codigo",fntTab));
							cell2.HorizontalAlignment = Element.ALIGN_CENTER;
							cell2.VerticalAlignment = Element.ALIGN_CENTER;
							tab.AddCell(cell2);
							cell2 = new PdfPCell(new Phrase("Nombre",fntTab));
							cell2.HorizontalAlignment = Element.ALIGN_CENTER;
							cell2.VerticalAlignment = Element.ALIGN_CENTER;
							tab.AddCell(cell2);
							cell2 = new PdfPCell(new Phrase("Descripcion",fntTab));
							cell2.HorizontalAlignment = Element.ALIGN_CENTER;
							cell2.VerticalAlignment = Element.ALIGN_CENTER;
							tab.AddCell(cell2);
							cell2 = new PdfPCell(new Phrase("Tipo Producto",fntTab));
							cell2.HorizontalAlignment = Element.ALIGN_CENTER;
							cell2.VerticalAlignment = Element.ALIGN_CENTER;
							tab.AddCell(cell2);
							cell2 = new PdfPCell(new Phrase("Cantidad",fntTab));
							cell2.HorizontalAlignment = Element.ALIGN_CENTER;
							cell2.VerticalAlignment = Element.ALIGN_CENTER;
							tab.AddCell(cell2);
							cell2 = new PdfPCell(new Phrase("Precio Unitario",fntTab));
							cell2.HorizontalAlignment = Element.ALIGN_CENTER;
							cell2.VerticalAlignment = Element.ALIGN_CENTER;
							tab.AddCell(cell2);
							cell2 = new PdfPCell(new Phrase("Precio Total",fntTab));
							cell2.HorizontalAlignment = Element.ALIGN_CENTER;
							cell2.VerticalAlignment = Element.ALIGN_CENTER;
							tab.AddCell(cell2);
							//aqui me quede agregar lista
							for (int i=0;i<lstOrdenCompra.Count;i++){
								for (int j=0;j<lstOrdenCompra[i].LineaordenCompra.Count;j++) {
									BELineaOrdenCompra be=lstOrdenCompra[i].LineaordenCompra[j];
									cell2 = new PdfPCell(new Phrase(be.ProductoProveedor.Producto.Codigo+"",fntRes));
									cell2.HorizontalAlignment = Element.ALIGN_CENTER;
									cell2.VerticalAlignment = Element.ALIGN_CENTER;
									tab.AddCell(cell2);
									cell2 = new PdfPCell(new Phrase(be.ProductoProveedor.Producto.Nombre,fntRes));
									cell2.HorizontalAlignment = Element.ALIGN_CENTER;
									cell2.VerticalAlignment = Element.ALIGN_CENTER;
									tab.AddCell(cell2);
									cell2 = new PdfPCell(new Phrase(be.ProductoProveedor.Producto.Descripcion,fntRes));
									cell2.HorizontalAlignment = Element.ALIGN_CENTER;
									cell2.VerticalAlignment = Element.ALIGN_CENTER;
									tab.AddCell(cell2);
									cell2 = new PdfPCell(new Phrase(be.ProductoProveedor.Producto.TipoProducto.Descripcion,fntRes));
									cell2.HorizontalAlignment = Element.ALIGN_CENTER;
									cell2.VerticalAlignment = Element.ALIGN_CENTER;
									tab.AddCell(cell2);
									cell2 = new PdfPCell(new Phrase(be.Cantidad+"",fntRes));
									cell2.HorizontalAlignment = Element.ALIGN_CENTER;
									cell2.VerticalAlignment = Element.ALIGN_CENTER;
									tab.AddCell(cell2);
									cell2 = new PdfPCell(new Phrase(be.PrecioUnitario+"",fntRes));
									cell2.HorizontalAlignment = Element.ALIGN_CENTER;
									cell2.VerticalAlignment = Element.ALIGN_CENTER;
									tab.AddCell(cell2);
									cell2 = new PdfPCell(new Phrase(be.PrecioTotal+"",fntRes));
									cell2.HorizontalAlignment = Element.ALIGN_CENTER;
									cell2.VerticalAlignment = Element.ALIGN_CENTER;
									tab.AddCell(cell2);
									
								}
		        			}
							doc.Add(tab);
							doc.Close();
		//					MessageBox.Show("Exportación exitosa", "Aviso");
							System.Diagnostics.Process.Start("AcroRd32.exe",path);
							//this.Close();
						}
		        		catch(Exception ex)
						{
		        			Utils.MessageError("",ex);
						}
	        	
	        	}
        	}
        	else{
        			Utils.MessageAviso("Debe de seleccionar por lo menos una Orden de Compra");
        	}
        }
        else{
        		Utils.MessageAviso("Debe de seleccionar por lo menos una Orden de Compra");
        }
        	}catch(Exception ex){
        		Utils.MessageError("",ex);
        	}
    	}
        
        void ListaOrdenCompraDGVCellMouseDoubleClick(object sender, DataGridViewCellMouseEventArgs e)
        {
        	try{
        		if (ListaOrdenCompraDGV.Rows.Count>0){
		        	int fila=ListaOrdenCompraDGV.CurrentRow.Index;
		        	if ((bool)ListaOrdenCompraDGV[0,fila].Value){
		        		ListaOrdenCompraDGV[0,fila].Value=false;
		        	}
		        	else{
		        		ListaOrdenCompraDGV[0,fila].Value=true;
		        	}
        		}
        	}
        	catch(Exception ex){
        		Utils.MessageError("",ex);
        	}
        }
    }
}
    
